// 公式为：output = Kp * error + Ki * error之和 + Kd * error的微分

#ifndef __PID_CONTROLLER_H__
#define __PID_CONTROLLER_H__

class PidController
{
public:
//构造函数
    PidController() = default;
    PidController(float kp, float ki, float kd);

// pid的参数值
private:
    float target_; //目标速度值
    float out_min_; //速度下限
    float out_max_; //速度上限
    float kp_; //公式系数
    float ki_;
    float kd_;

    float intergral_up_ = 2500; // 积分上限，即误差之和的上限
    // pid 中间过程值
    float error_; //误差值
    float error_sum_; //误差值之和，积分项
    float derror_; //误差的微分项
    float prev_error_; //上一次误差

public:
    float update(float current);// 提供当前值，返回下次输出值，也就是PID的结果
    void update_target(float target);// 更新目标值
    void update_pid(float kp, float ki, float kd); // 更新PID参数
    void reset();// 重置PID
    void out_limit(float min, float max);// 设置输出限制

};

#endif // __PID_CONTROLLER_H__